package com.chenglu.android.common.base;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewStub;
import android.widget.LinearLayout;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.FragmentActivity;

import com.chenglu.android.R;
import com.chenglu.android.common.base.bean.Event;
import com.chenglu.android.common.net.Constant;
import com.chenglu.android.common.utils.EventBusUtils;
import com.chenglu.android.common.utils.LogUtils;
import com.chenglu.android.common.utils.SPUtils;
import com.chenglu.android.common.utils.ToastUtils;
import com.chenglu.android.common.utils.Utils;
import com.chenglu.android.mine.login.LoginActivity;
import com.chenglu.android.onelogin.OneKeyLoginActivity;
import com.gyf.immersionbar.BarHide;
import com.gyf.immersionbar.ImmersionBar;
import com.lxj.xpopup.XPopup;
import com.lxj.xpopup.animator.PopupAnimator;
import com.lxj.xpopup.core.BottomPopupView;
import com.lxj.xpopup.core.CenterPopupView;
import com.scwang.smartrefresh.layout.SmartRefreshLayout;


import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;

import java.util.List;

import butterknife.ButterKnife;
import butterknife.Unbinder;
import me.jessyan.autosize.internal.CustomAdapt;


/**
 * @author lyj
 * @Created by Copyright © 2023 Guangzhou Hongma Technology Co., Ltd. All rights reserved.
 * @Description：基类
 */
public abstract class BaseActivity extends FragmentActivity implements CustomAdapt {

    protected boolean isLogin = false;
    private Unbinder unbinder;
    private ViewStub emptyView;
    protected Context mContext;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

//        setContentView(this.getLayoutId());
        BaseApplication.i().getActivityManage().addActivity(this);
        mContext = this;

//        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
        if (!isFullScreenLayout()) {
            LogUtils.d("走进来~~~~");
            setContentView(R.layout.activity_base);
            ((ViewGroup) findViewById(R.id.fl_content)).addView(getLayoutInflater().inflate(getLayoutId(), null));
            unbinder = ButterKnife.bind(this);

        }
//         setContentView(getLayoutId());
        if (registerEventBus()) {
            EventBusUtils.register(this);
        }

        initView();

    }




    @Override
    protected void onResume() {
        super.onResume();
        isLogin = SPUtils.getBoolean("ISLOGIN", false);
    }

    /**
     * 设置沉浸栏颜色
     *
     * @param statusBarColor 颜色
     */
    protected void setImmersionBarColor(int statusBarColor) {
        setImmersionBarColor(statusBarColor, false);
    }

    /**
     * 设置沉浸栏颜色
     *
     * @param statusBarColor 沉浸栏颜色
     */
    protected void setImmersionBarColor(int statusBarColor, boolean fitsSystemWindows) {
        setImmersionBarColor(statusBarColor, statusBarColor, fitsSystemWindows);
    }


    /**
     * 设置沉浸栏颜色
     *
     * @param statusBarColor     沉浸栏颜色
     * @param navigationBarColor 沉浸栏图标颜色
     */
    protected void setImmersionBarColor(int statusBarColor, int navigationBarColor, boolean fitsSystemWindows) {
        ImmersionBar.with(this)
                .statusBarColor(statusBarColor)
                .navigationBarColor(navigationBarColor)
                .fitsSystemWindows(fitsSystemWindows)
                .autoDarkModeEnable(true)
                .statusBarDarkFont(true)
                .init();
    }

    //
    protected String  getToken(){
        String aaccessToken = SPUtils.getString(Constant.AaccessToken, null);
        if(TextUtils.isEmpty(aaccessToken)){
//            ToastUtils.show("token不能空");
            return "" ;
        }
        return aaccessToken;
    }

    //跳转登录的方法
    public void login() {

        if (Utils.checkSim(mContext)) {
            //判断是否是模拟器
            if (Utils.isEmulator()) {
                startActivity(new Intent(mContext, LoginActivity.class));
            } else {
                startActivity(new Intent(mContext, OneKeyLoginActivity.class));
            }

        } else {
            startActivity(new Intent(mContext, LoginActivity.class));
        }
    }
    /**
     * 隐藏状态栏、导航栏
     */
    protected void setImmersionBarHide() {
        ImmersionBar.with(this)
                .fitsSystemWindows(false)
                .hideBar(BarHide.FLAG_HIDE_BAR)
                .init();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (unbinder != null) {
            unbinder.unbind();
        }
        if (registerEventBus()) {
            EventBusUtils.unregister(this);
        }

        //将Activity从管理器移除
//        BaseApplication.i().getActivityManage().removeActivity(this);
    }

    @Override
    public void onAttachedToWindow() {
        super.onAttachedToWindow();
//        initView();
    }

    //***************************************空页面方法 start*************************************

    /**
     * 数据为空页面
     */
    protected void showEmptyView() {
        showEmptyView(getString(R.string.no_data));
    }

    /**
     * 数据为空页面
     *
     * @param text 显示文案
     */
    protected void showEmptyView(String text) {
        showEmptyOrErrorView(text, R.drawable.default_img_no_data, false);
    }


    /**
     * 请求数据报错页面
     */
    protected void showErrorView() {
        showErrorView(getString(R.string.network_error_server_error));
    }

    /**
     * 请求数据报错页面
     *
     * @param text 显示文案
     */
    protected void showErrorView(String text) {
        showEmptyOrErrorView(text, R.drawable.bg_no_net, false);
    }


    /**
     * 请求数据报错或者为空页面
     *
     * @param text      提示文案
     * @param iconResId 显示的icon
     */
    public void showEmptyOrErrorView(String text, int iconResId, boolean showRefreshButton) {
        if (emptyView == null) {
            emptyView = findViewById(R.id.vs_empty);
        }
        emptyView.setVisibility(View.VISIBLE);
        findViewById(R.id.iv_empty).setBackgroundResource(iconResId);
        ((TextView) findViewById(R.id.tv_empty)).setText(text);
        if (showRefreshButton) {
            View refreshButton = findViewById(R.id.tv_try_again);
            refreshButton.setVisibility(View.VISIBLE);
            refreshButton.setOnClickListener(v -> onRefreshRetry());
        }
    }

    /**
     * 隐藏空页面
     */
    protected void hideEmptyView() {
        if (emptyView != null) {
            emptyView.setVisibility(View.GONE);
        }
    }

    /**
     * 刷新重试
     */
    protected void onRefreshRetry() {
    }

    //***************************************空页面方法 end*********************************

    /**
     * 停止刷新和加载更多
     *
     * @param layout 刷新layout
     */
    protected void stopRefresh(SmartRefreshLayout layout) {
        if (layout == null) {
            return;
        }
        layout.finishLoadMore();
        layout.finishRefresh();
    }

//    protected void noMoreData() {
//        if (data == null) {
//            return;
//        }
//        layout.finishLoadMore();
//        layout.finishRefresh();
//    }

    /**
     * 是否布局伸入状态栏类型Activity
     *
     * @return boolean
     */
    protected boolean isFullScreenLayout() {
        return false;
    }


    /**
     * 需要接收事件 重写该方法 并返回true
     *
     * @return boolean
     */
    protected boolean registerEventBus() {
        return false;
    }

    /**
     * 子类接受事件 重写该方法
     *
     * @param event 事件
     */
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onEventBus(Event event) {
    }

    /**
     * 返回页面layout
     *
     * @return layout
     */
    protected abstract int getLayoutId();

    /**
     * 初始化View
     */
    protected abstract void initView();


    //*************************************start 对话框********************************************//
    CustomPopup popupView;

    //弹窗登录的对话框
    public void showXPopupView(Context context, String title, String content, String confirmBtnText) {

        popupView = new CustomPopup(context);
        popupView.title = title;
        popupView.content = content;
        popupView.comfrim = confirmBtnText;
        new XPopup.Builder(context)
                .dismissOnTouchOutside(false)
                .asCustom(popupView)
                .show();
    }


    class CustomPopup extends CenterPopupView {
        //注意：自定义弹窗本质是一个自定义View，但是只需重写一个参数的构造，其他的不要重写，所有的自定义弹窗都是这样。
        public CustomPopup(@NonNull Context context) {
            super(context);
        }

        // 返回自定义弹窗的布局
        @Override
        protected int getImplLayoutId() {
            return R.layout.dialog_login_layout;
        }

        // 执行初始化操作，比如：findView，设置点击，或者任何你弹窗内的业务逻辑
        @Override
        protected void onCreate() {
            super.onCreate();
            TextView tvTitle = findViewById(R.id.tv_dialog_title);
            TextView tvContent = findViewById(R.id.tv_dialog_content);
            TextView tvComfirm = findViewById(R.id.tv_dialog_comfirm);

            tvTitle.setText(title);
            tvContent.setText(content);
            tvComfirm.setText(comfrim);
            tvComfirm.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    startActivity(new Intent(mContext, LoginActivity.class));
                    finish();
                }
            });


        }

        // 设置最大宽度，看需要而定，
        @Override
        protected int getMaxWidth() {
            return super.getMaxWidth();
        }

        // 设置最大高度，看需要而定
        @Override
        protected int getMaxHeight() {
            return super.getMaxHeight();
        }

        // 设置自定义动画器，看需要而定
        @Override
        protected PopupAnimator getPopupAnimator() {
            return super.getPopupAnimator();
        }

        /**
         * 弹窗的宽度，用来动态设定当前弹窗的宽度，受getMaxWidth()限制
         *
         * @return
         */
        protected int getPopupWidth() {
            return 0;
        }

        /**
         * 弹窗的高度，用来动态设定当前弹窗的高度，受getMaxHeight()限制
         *
         * @return
         */
        protected int getPopupHeight() {
            return 0;
        }

        public String title;
        public String content;
        public String comfrim;

    }





    /**
     *
     * @description 停止上拉刷新 下来加载更多数据
     *
     */
    protected  void  stopLoadMoreRefresh(SmartRefreshLayout layout,int total,int current,int size){
        if(layout ==null){
            return;
        }
        if (total < size) {
            layout.setEnableRefresh(false);
        }else {
            layout.setEnableRefresh(true);
        }
        if (current * size >= total) {

            layout.setEnableLoadMore(false);

        } else {
            layout.setEnableLoadMore(true);
        }

    }

//        头条适配方案的实现方法
    @Override
    public boolean isBaseOnWidth() {
        return false;
    }

    @Override
    public float getSizeInDp() {
        return 812;
    }

}
